import { http } from '@kit.NetworkKit'
import { promptAction } from '@kit.ArkUI'

let request = http.createHttp()

export function get<T>(url:string,params?:object):Promise<T> {
  return new Promise<T>((resole,reject)=>{
    if (params) {
      url += '?' + Object.keys(params).map((k) => `${k}=${params[k]}`).join('&')
    }
    request.request(url)
      .then((respose) =>{
        if(respose.responseCode == 200){
          let t:T = JSON.parse(respose.result as string)
          resole(t)
        } else {
          reject(new Error('网络错误:'+respose.responseCode))
        }
      })
      .catch((e:Error)=>{
        reject(e)
      })
  })
}

export function post<T>(url:string, data:object):Promise<T> { // 封装 post请求 - 上传数据 - 基于其安全性常用于登录注册
  // Promise 的核心概念 -- 每个 Promise 都处于以下状态之一：
  // Pending（等待中）：初始状态，操作尚未完成
  // Fulfilled（已兑现）：操作成功完成 --  resolve() 传递结果给 .then()
  // Rejected（已拒绝）：操作失败 --  reject() 传递错误给 .catch()
  return new Promise<T>((resolve, reject) => {
    request.request(url, {
      method:http.RequestMethod.POST, // 默认为GET
      header:{"Content-Type":"application/json"}, // 上传数据的类型
      extraData:data, // 上传的数据
      connectTimeout:5000, // 链接超时时间
      readTimeout:5000 // 读取超时时间(超过则链接超时)
    }).then((response) => { // 服务器返回的响应  // resolve() 传递结果给 .then()
      if(response.responseCode == 200) { // 响应码（检查 HTTP 状态码） 2xx 开头为成功，
        // 4xx 都是客户端的错误， 404 path（路径）写错了, 405 请求方式出错， 415 内容格式出错
        // 5xx 服务器的错误
        let t:T = JSON.parse(response.result.toString()) // 解析数据 并接收
        resolve(t) // 将状态改为 fulfilled
      } else {
        reject(new Error(`网络错误：${response.responseCode}`))
      }
    })
      .catch((e:Error) => { // 服务器未响应 -- url域名不存在、超时、出错时捕获
        reject(e)
      })
  })
}